const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
    entry: {
        entr1: './src/app.jsx',
    },
    output: {
        path: path.resolve(__dirname, 'dist'),
        publicPath: '/dist/',
        filename: 'js/app.js'
    },
    module: {
        rules: [
            {//react文件的处理
                test: /\.jsx$/,
                exclude: /(node_modules)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['env', 'react']
                    }
                }
            }, {//css文件的处理
                test: /\.css$/,
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use: "css-loader"
                })//style-loader一定要在css-loader之前
            }, {//sass文件的处理
                test: /\.scss$/,
                use: ExtractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: ['css-loader', 'sass-loader']
                })
            }, {//图片文件的处理
                test: /\.(png|jpg|gif)$/,
                use: [
                    {
                        loader: 'url-loader',
                        options: {
                            limit: 8192,//图片文件大于8k时，才打包成单独的文件
                            name: './resource/[name].[ext]'
                        }
                    }
                ]
            }, {//图片文件的处理
                test: /\.(eot|svg|ttf|woff|woff2|otf)$/,
                use: [
                    {
                        loader: 'url-loader',
                        options: {
                            limit: 8192, //图片文件大于8k时，才打包成单独的文件
                            name: './resource/[name].[ext]'
                        }
                    }
                ]
            }
        ]
    },
    plugins: [
        //处理html文件
        new HtmlWebpackPlugin({
            template: './src/index.html',
            favicon: './favicon.ico'
        }),//什么都不用配置，用默认值就可以，约定大于配置的原则,如果主动配置会覆盖默认配置

        //独立css文件
        new ExtractTextPlugin('css/[name].css'),
        //提取公共模块
        new webpack.optimize.CommonsChunkPlugin({
            name: 'common',
            filename: 'js/base.js'
        })

    ],
    devServer: {
        // contentBase: path.join(__dirname, "./dist/"), //网站的根目录为 根目录/dist，如果配置不对，会报Cannot GET /错误
        // // //这上面的contentBase  path.join(__dirname, "../dist") 和 ./dist 均可
        // port: 9090, //端口改为9000
        // host: '192.168.43.135',
        open: true, // 自动打开浏览器，适合懒人
        historyApiFallback: {//在访问一个路径的时候，如果找不到，会返回到这里指定的页面 
            index: '/dist/index.html'//这样每次初次打开，就不用手动在http://localhost:8083/后面加'/dist/index.html',指定访问根路径
        },
        proxy: {//proxy字段执行域名劫持            
            //将页面请求 http://localhost:[port]/manage/user/login.do 代理到http://admintest.happymmall.com服务器
            '/manage' : {
                target: 'http://admintest.happymmall.com',
                changeOrigin: true//changeOrigin的作用是：当请求时，后端会认为是向target请求，否则就不执行域名劫持
            },
            '/user/logout.do' : {
                target: 'http://admintest.happymmall.com',
                changeOrigin: true
            }
        }
    },
    resolve: {
        alias: {
            page      : path.resolve(__dirname, 'src/page'),//在当前文件所在目录，去找
            component : path.resolve(__dirname, 'src/component'),
            util      : path.resolve(__dirname, 'src/util'),
            service   : path.resolve(__dirname, 'src/service')
        }
    }
}